package com.qf.spring.aop.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 动态代理类
 */
public class ProxyHandler implements InvocationHandler {

    //1.初始化，被代理的对象，目标对象
    private Object target ;
    //2.提供有参构造，传入目标对象

    public ProxyHandler() {
    }

    public ProxyHandler(Object target) {
        this.target = target;
    }


    /**
     *
     * @param proxy 目标对象
     * @param method 目标对象的方法
     * @param args 方法参数
     * @return
     * @throws Throwable 抛出异常
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //自定义的增强内容
        System.out.println("方法执行之前，打印日志");
        //调用实际业务的处理方法
        Object obj = method.invoke(target, args);
        //自定义的增强内容
        System.out.println("方法执行之后，打印日志");
        return obj;
    }
}
